import open3d as o3d
import numpy as np
from matplotlib import pyplot as plt

# 1. 读取点云数据（假设强度信息存储在一个数组中）
# 这里我们假设您有一个点云文件（例如 PLY 或 PCD 格式），并且强度信息存储在一个额外的数组中。
# 例如，假设点云数据包含在一个 NumPy 数组中，并且强度信息也在一个数组中。

# 读取点云数据
pcd = o3d.io.read_point_cloud("../datasets/standford_cloud_data/China dragon.pcd")

# 假设强度信息是一个与点云中点数相同的 NumPy 数组
# 这里我们用随机数据来模拟强度值，实际使用时应从数据中提取
intensity = np.random.rand(len(pcd.points))  # 替换为实际强度数据

# 2. 将强度归一化到 [0, 1] 范围
intensity_normalized = (intensity - np.min(intensity)) / (np.max(intensity) - np.min(intensity))

# 3. 创建 RGB 颜色映射（将强度映射到颜色）
colors = plt.cm.viridis(intensity_normalized)[:, :3]  # 使用 viridis 颜色映射

# 4. 将颜色应用到点云
pcd.colors = o3d.utility.Vector3dVector(colors)

# 5. 可视化点云
o3d.visualization.draw_geometries([pcd], window_name="带有强度的点云")
